/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Bean.Profesor;
import Conexion.Conexion;
import Configuracion.AppConfig;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author kriss
 */
public class DAO_Profesor {
    private String SQL = "";
    private PreparedStatement statement;
    ResultSet rs;
    private int id = -1;
    private int bandera = -1;
    private Connection conexion;

    public int insertaProfesor(Profesor prof) {
        
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
      
        conexion = con.getConexion();
        if (conexion != null) {
            try {
                this.SQL = "Insert into profesor (nombres,apaterno,amaterno,direccion,telefono,celular, correo) values (?,?,?,?,?,?,?);";
               
                 this.statement = conexion.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
      
                this.statement.setString(1, prof.getNombres());
                this.statement.setString(2, prof.getApaterno());
                this.statement.setString(3, prof.getAmaterno());
                this.statement.setString(4, prof.getDireccion());
                this.statement.setString(5, prof.getTelefono());
                this.statement.setString(6, prof.getCelular());
                this.statement.setString(7, prof.getCorreo());
                this.bandera = this.statement.executeUpdate();
                System.out.println(""+statement.toString());
                if (bandera == 1) {
                    rs = statement.getGeneratedKeys();
                    while (rs.next()) { 
                        id = rs.getInt(1);
                    }
                }
                if (this.statement != null) { 
                    this.statement.close();              }
            } catch (Exception e) { 
                System.out.println("Dispositivos insertaDispositivo: " + e.getMessage());
                con.cerrarConexion(); 
            } finally {
                con.cerrarConexion(); 
            }
        }

        return this.id;
    }
        public int actualizarProfesor(Profesor prof){
            if(prof.getId()==0){
                insertaProfesor(prof);
            }
             bandera = -1;
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        conexion = con.getConexion();
        if (conexion != null) {
            try {
                conexion.setAutoCommit(false);
                this.SQL = "update profesor set nombres=?,apaterno=?,amaterno=?,direccion=?,telefono=?,celular=?, correo=? where id=?;";
                this.statement = conexion.prepareStatement(SQL);
//                this.statement.setString(1, "I");
                this.statement.setString(1, prof.getNombres());
                this.statement.setString(2, prof.getApaterno());
                this.statement.setString(3, prof.getAmaterno());
                this.statement.setString(4, prof.getDireccion());
                this.statement.setString(5, prof.getTelefono());
                this.statement.setString(6, prof.getCelular());
                this.statement.setString(7, prof.getCorreo());
                this.statement.setInt(8,prof.getId());
                this.bandera = this.statement.executeUpdate();

                if (bandera == 1) {
                    conexion.commit();
                }

                if (this.statement != null) {
                    this.statement.close();
                }
            } catch (Exception e) {
                System.out.println("profesor.baja: " + e.getMessage());
                try {
                    conexion.rollback();
                } catch (SQLException error) {
                    System.out.println("profesor.baja.rollback: " + error.getMessage());
                }
                con.cerrarConexion();
            }
            finally {
                con.cerrarConexion();
            }
        }
        return this.bandera;

        }
                
        public Profesor consultaID(int idProf) {
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        Profesor infProfesor = new Profesor();
        
        // se verifica que se crea una conexión con el null
        try {
            // se cre la consulta de base de datos.
            SQL = "SELECT id,nombres,apaterno,amaterno,direccion,telefono,celular, correo"
                    + " FROM profesor where id=?;";
            System.out.println(SQL);
            statement = con.getConexion().prepareStatement(SQL); // creo la conexión y al mismo tiempo preparo el Stament(sentencia).
            statement.setInt(1, idProf); // enviamos el parametro idAlumno
            ResultSet result = statement.executeQuery(); //excuteQuery sirve solo para las consultas....

            
          
            while (result.next()) {
           // obtengo primero un objeto llamos ID alumno,  y lo convierte a String después lo convierta a entero.
                infProfesor.setId(Integer.parseInt(result.getObject("id").toString()));
                infProfesor.setNombres(result.getObject("nombres").toString());
                infProfesor.setApaterno(result.getObject("apaterno").toString());
                infProfesor.setAmaterno(result.getObject("amaterno").toString());
                infProfesor.setDireccion(result.getObject("direccion").toString());
                infProfesor.setTelefono(result.getObject("telefono").toString());
                infProfesor.setCelular(result.getObject("celular").toString());
                infProfesor.setCorreo(result.getObject("correo").toString());
                
                
            }
            
            // pregunta si hay más
            if (statement != null) {
                statement.close(); // cierra la xonexión
            }
        } catch (Exception e) {
            System.out.println("Dispositivos consultaID: " + e.toString());
            con.cerrarConexion(); //cierra la conexión
        } finally {
            con.cerrarConexion();
            return infProfesor;
        }
    }
     public int eliminarProfesor(int idProf) {
         
         bandera = -1;
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        conexion = con.getConexion();
        if (conexion != null) {
            try {
                conexion.setAutoCommit(false);
                this.SQL = "delete FROM profesor where id=?;";
                this.statement = conexion.prepareStatement(SQL);
//                this.statement.setString(1, "I");
                this.statement.setInt(1,idProf);
                this.bandera = this.statement.executeUpdate();

                if (bandera == 1) {
                    conexion.commit();
                }

                if (this.statement != null) {
                    this.statement.close();
                }
            } catch (Exception e) {
                System.out.println("profesor.baja: " + e.getMessage());
                try {
                    conexion.rollback();
                } catch (SQLException error) {
                    System.out.println("profesor.baja.rollback: " + error.getMessage());
                }
                con.cerrarConexion();
            }
            finally {
                con.cerrarConexion();
            }
        }
        return this.bandera;

    }
    public ArrayList<Profesor> getListaProfesores() {
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        ArrayList<Profesor> lista=new ArrayList<Profesor>();
        
        // se verifica que se crea una conexión con el null
        try {
            // se cre la consulta de base de datos.
            SQL = "SELECT id,nombres,apaterno,amaterno,direccion,telefono,celular, correo"
                    + " FROM profesor;";
            System.out.println(SQL);
            statement = con.getConexion().prepareStatement(SQL);
            
            ResultSet result = statement.executeQuery(); //excuteQuery sirve solo para las consultas....

            while (result.next()) {
                Profesor infProfesor = new Profesor();
                infProfesor.setId(Integer.parseInt(result.getObject("id").toString()));
                infProfesor.setNombres(result.getObject("nombres").toString());
                infProfesor.setApaterno(result.getObject("apaterno").toString());
                infProfesor.setAmaterno(result.getObject("amaterno").toString());
                infProfesor.setDireccion(result.getObject("direccion").toString());
                infProfesor.setTelefono(result.getObject("telefono").toString());
                infProfesor.setCelular(result.getObject("celular").toString());
                infProfesor.setCorreo(result.getObject("correo").toString());
                lista.add(infProfesor);
                
                
            }
            
            // pregunta si hay más
            if (statement != null) {
                statement.close(); // cierra la xonexión
            }
        } catch (Exception e) {
            System.out.println("Dispositivos consultaID: " + e.toString());
            con.cerrarConexion(); //cierra la conexión
        } finally {
            con.cerrarConexion();
            return lista;
        }
    }
}
